import * as fs from 'fs'

/**
 * 将一个 .env 文件内容读取为 js 对象
 * - 读取一个env文件，匹配指定正则的行，以对象形式返回
 * @param envFilePath 
 * @param regExp 用于筛选配置键的正则表达式 
 * @param parse 用于将一条记录值解析为指定格式（如数组、对象...，可以通过泛型限制类型）的函数
 * @returns 
 */
function getEnvs<T>(envFilePath:string, regExp?:RegExp, parse?:(right:string)=>T):Record<string,T>{
  let res:Record<string,T> = {};
  fs.readFileSync(envFilePath).toString().split("\n").forEach((line:string) =>{
    const [left,right] = line.split(/\s*\=\s*/)
    if(regExp && regExp.test(left)) {
        if(parse){
            res[left.trim()] = parse(right)
        }else{
            res[left.trim()] = right as T
        }
    }
  })
  return res
}

export {
  getEnvs
}